﻿-------------------------------------------------------------------------------
-- Смена диска активной панели RCtrl+стрелки. © SimSU
-------------------------------------------------------------------------------

---- Настройки
local function Settings()
-- Начало файла Profile\SimSU\Shell_ArrowChDrv.cfg
return{
  Key="RCtrlLeft RCtrlRight"; --Prior=50;
  CtrlState=bor(0x0004);
--[[ Маски клавиш-модификаторов.
RIGHT_ALT_PRESSED  0x0001 Правый ALT нажат.
LEFT_ALT_PRESSED   0x0002 Левый ALT нажат.
RIGHT_CTRL_PRESSED 0x0004 Правый CTRL нажат.
LEFT_CTRL_PRESSED  0x0008 Левый CTRL нажат.
SHIFT_PRESSED      0x0010 Клавиша SHIFT нажата.
NUMLOCK_ON         0x0020 NUM LOCK включён.
SCROLLLOCK_ON      0x0040 SCROLL LOCK включён.
CAPSLOCK_ON        0x0080 CAPS LOCK включён.
ENHANCED_KEY       0x0100 Клавиша расширенная.
]]
}
-- Конец файла Profile\SimSU\Shell_ArrowChDrv.cfg
end

---- Локализация
_G.far.lang=far.lang or win.GetEnv("farlang")
-- Встроенные языки / Buildin laguages
local function Messages()
if far.lang=="Russian" then
-- Начало файла Profile\SimSU\Shell_ArrowChDrvRussian.lng
return{
  Descr="Смена диска активной панели RCtrl+стрелки. © SimSU";
}
-- Конец файла Profile\SimSU\Shell_ArrowChDrvRussian.lng
else--if far.lang=="English" then
-- Begin of file Profile\SimSU\Shell_ArrowChDrvEnglish.lng
return{
  Descr="Смена диска активной панели RCtrl+стрелки. © SimSU";
}
-- End of file Profile\SimSU\Shell_ArrowChDrvEnglish.lng
end end

local M=(loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Shell_ArrowChDrv"..far.lang..".lng") or Messages)()
local S=(loadfile(win.GetEnv("FARLOCALPROFILE").."\\SimSU\\Shell_ArrowChDrv.cfg") or loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Shell_ArrowChDrv.cfg") or Settings)()

local SimSU=SimSU or {}
-------------------------------------------------------------------------------
local CtrlState=S.CtrlState or 0x0004

function SimSU.Shell_ArrowChDrv()
  local _,_,_,key = regex.match(akey(1),"(R?Ctrl)?(R?Alt)?(Shift)?(.*)")
  _ = SimSU.Shell_RememberSelected and SimSU.Shell_RememberSelected.Save and SimSU.Shell_RememberSelected.Save()
  if APanel.Left then Keys("AltF1") else Keys("AltF2") end
  Keys(akey(1):sub(6))
  local mm=mf.mmode(1,0)
  while band(Mouse.LastCtrlState,CtrlState)~=0 do _,_,_,key = regex.match(mf.waitkey(100),"(R?Ctrl)?(R?Alt)?(Shift)?(.*)"); Keys(key) end
  Keys("Enter")
  mf.mmode(1,mm)
  far.Timer(100, function(h) if Area.Shell then h:Close(); _ = SimSU.Shell_RememberSelected and SimSU.Shell_RememberSelected.Restore and SimSU.Shell_RememberSelected.Restore(APanel) end end)
--  _ = SimSU.Shell_RememberSelected and SimSU.Shell_RememberSelected.Restore and SimSU.Shell_RememberSelected.Restore()
end
-------------------------------------------------------------------------------
if not Macro then return {Shell_ArrowChDrv=SimSU.Shell_ArrowChDrv} end

local ok, mod = pcall(require,"SimSU.Shell_ArrowChDrv"); if ok then SimSU=mod else _G.SimSU=SimSU end
local ok, mod = pcall(require,"SimSU.Shell_RememberSelected"); if ok then SimSU.Shell_RememberSelected=mod.Shell_RememberSelected end
-------------------------------------------------------------------------------

Macro {area="Shell Info QView Tree"; key=S.Key; priority=S.Prior; description=M.Descr; flags="EmptyCommandLine";
  action=SimSU.Shell_ArrowChDrv;
}
